package org.ehe.finance.payable.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.ehe.common.mybatis.core.page.PageQuery;
import org.ehe.common.mybatis.core.page.TableDataInfo;
import org.ehe.finance.payable.domain.ErpFinancePayable;
import org.ehe.finance.payable.domain.bo.PayableBo;
import org.ehe.finance.payable.domain.vo.PayableResponseVO;
import org.ehe.finance.payable.mapper.PayableMapper;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author :zhangnn
 * @className :PayableService
 * @description: TODO
 * @date 2025-09-02 10:11:21
 */
public interface PayableService extends IService<ErpFinancePayable> {
    /**
     * 分页查询应付账款
     */
    TableDataInfo<PayableResponseVO> selectPayablePage(PayableBo queryVO, PageQuery pageQuery);

    /**
     * 创建应付账款
     */
    boolean createPayable(PayableBo bo);

    /**
     * 更新应付账款
     */
    boolean updatePayable(PayableBo bo);

    /**
     * 删除应付账款
     */
    boolean deletePayable(Long id);

    /**
     * 批量删除应付账款
     */
    boolean batchDeletePayable(List<Long> ids);

    /**
     * 根据ID查询应付账款详情
     */
    ErpFinancePayable getPayableDetail(Long id);

    /**
     * 更新付款金额
     */
    boolean updatePaymentAmount(Long payableId, BigDecimal paymentAmount);

    /**
     * 查询即将到期的应付账款
     */
    List<ErpFinancePayable> getDuePayables(int days);

    /**
     * 根据供应商统计应付金额
     */
    List<PayableMapper.PayableStatistics> getPayableStatisticsBySupplier();

    /**
     * 生成应付账款单据号
     */
    String generateBillNo();

    /**
     * 校验应付账款数据
     */
    void validatePayableData(PayableBo bo);
}
